Storage systems store objects according to various corresponding storage architectures. Examples of storage architectures include an object storage, a file system, a block storage, and/or a database.
Each object within a storage system is associated with data and metadata. Data (also referred to herein as “object data”) includes, for example, information that is used by an end user and/or a client application. As an example, data for a Sales Application may include information about customers, products, and sales. As another example, data for a Human Resources Application may include information about employees, departments, and salaries. Metadata describes how the data is set up and/or stored. Additionally or alternatively, metadata describes characteristics about the data itself. Metadata may be used to manipulate and/or manage the objects in a storage system.
In cloud computing environments, distributed storage systems are often used to store object data for end users and/or client applications. Typically, distributed storage systems replicate data objects across multiple physical storage locations. One benefit of distributed storage systems is data redundancy. If one copy of a data object becomes lost or corrupted, a separate copy of the data object may be retrieved from another node within the distributed storage system. Another benefit of distributed storage systems is that access times to data objects may be decreased. Access requests may originate from multiple storage clients that are geographically dispersed. The distributed storage system may route requests to storage servers based on location, load and/or other factors in an effort to minimize data access times.
Distributed storage system implementations involve several challenges including managing data consistency. Various consistency models have been developed to guarantee that the results of read and write operations will be predictable. Eventual consistency is an example of a consistency model that may be employed in the context of a cloud environment. According to the eventual consistency model, the storage system guarantees that, if no new updates to a data object are made, all reads of the data object will eventually return the last updated version of the object. With eventual consistency, different storage clients may access data objects in different states at a given point in time. For example, an update made by one client of the storage system may not be immediately viewable by another client as it may take time to replicate the change throughout the system.
In contrast to eventual consistency, strong consistency models guarantee that all writes to a data object are seen by all parallel processes in the same order that the writes are performed. In other words, strong consistency ensures that only one consistent state is observed at a given point in time. If a write is committed by one storage client, then the written data is immediately viewable by other storage clients accessing the storage system.
Cloud providers often prefer eventual consistency models to strong consistency models due to the high availability and scalability of eventual consistency models. However, eventual consistency models are prone to returning partial and/or corrupt data since there may be two consistent states at a given point in time. Many applications require strong consistency to guarantee that different nodes within a distributed storage environment are in the same state. As these applications are pushed to cloud environments, the availability and scalability of strong consistency models become increasingly significant.
The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.